﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Fennec;

namespace IHM
{
    public partial class FenetreParametres : Window
    {
        int nombreJoueurs; // récupéré depuis la fenêtre précédente
        ECarteTaille taille; // récupéré depuis la fenêtre précédente

        ECouleur[] couleurs; // utilisé pour mémoriser la dernière couleur choisie et, une fois les paramètres choisis, transmettre les couleurs à la fenêtre suivante
        private FenetreJeu fenetreSuivante; // Jeu pour la fenêtre suivante

        public FenetreParametres()
        {
            nombreJoueurs = 2;
            taille = ECarteTaille.CARTE_TAILLE_PETITE;
            couleurs = new ECouleur[4];

            for (int i = 0; i < couleurs.Length; i++)
            {
                couleurs[i] = ECouleur.COLOR_NULL;
            }
        }

        public FenetreParametres(int nb, ECarteTaille t)
        {
            InitializeComponent();

            nombreJoueurs = nb;
            taille = t;

            // Rendre visible(s) le ou les StackPanel(s) visible(s)
                if (nombreJoueurs == 3)
                {
                    stackPanelJ3.Visibility = Visibility.Visible;
                }

                if (nombreJoueurs == 4)
                {
                    stackPanelJ3.Visibility = Visibility.Visible;
                    stackPanelJ4.Visibility = Visibility.Visible;
                }

            // Initialiser tableau de couleurs
            couleurs = new ECouleur[nombreJoueurs];
            for (int i = 0; i < couleurs.Length; i++)
            {
                couleurs[i] = ECouleur.COLOR_NULL;
            }
        }

        private void ClickCouleur(object sender, RoutedEventArgs e)
        {
            CheckBox checkbox = (CheckBox)sender;

            // Récupérer informations du Tag
                string tag = (string)checkbox.Tag;
                char debut = tag[0];
                char fin = tag[tag.Length - 1];

            // Les deux switch à suivre font office de "double groupname" :
            // Groupname est utilisable par RadioButton mais pas en double comme nous le désirons ici (dépendance entre les boutons de même couleur et de même civilisation)
            // CheckBox n'a rien de tel mais on peut modifier la valeur "IsChecked" contrairement à RadioButton

                // Selon la couleur, décocher autres civilisations de même couleur
                switch (debut)
                {
                    case 'R':
                        switch (fin)
                        {
                            case '1':
                                checkBoxJ2Rouge.IsChecked = false;
                                checkBoxJ3Rouge.IsChecked = false;
                                checkBoxJ4Rouge.IsChecked = false;
                                couleurs[0] = ECouleur.COLOR_RED;
                                break;
                            case '2':
                                checkBoxJ1Rouge.IsChecked = false;
                                checkBoxJ3Rouge.IsChecked = false;
                                checkBoxJ4Rouge.IsChecked = false;
                                couleurs[1] = ECouleur.COLOR_RED;
                                break;
                            case '3':
                                checkBoxJ2Rouge.IsChecked = false;
                                checkBoxJ1Rouge.IsChecked = false;
                                checkBoxJ4Rouge.IsChecked = false;
                                couleurs[2] = ECouleur.COLOR_RED;
                                break;
                            case '4':
                                checkBoxJ2Rouge.IsChecked = false;
                                checkBoxJ3Rouge.IsChecked = false;
                                checkBoxJ1Rouge.IsChecked = false;
                                couleurs[3] = ECouleur.COLOR_RED;
                                break;
                        }
                        break;
                    case 'B':
                        switch (fin)
                        {
                            case '1':
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ4Bleu.IsChecked = false;
                                couleurs[0] = ECouleur.COLOR_BLUE;
                                break;
                            case '2':
                                checkBoxJ1Bleu.IsChecked = false;
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ4Bleu.IsChecked = false;
                                couleurs[1] = ECouleur.COLOR_BLUE;
                                break;
                            case '3':
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ1Bleu.IsChecked = false;
                                checkBoxJ4Bleu.IsChecked = false;
                                couleurs[2] = ECouleur.COLOR_BLUE;
                                break;
                            case '4':
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ1Bleu.IsChecked = false;
                                couleurs[3] = ECouleur.COLOR_BLUE;
                                break;
                        }
                        break;
                    case 'V':
                        switch (fin)
                        {
                            case '1':
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                couleurs[0] = ECouleur.COLOR_GREEN;
                                break;
                            case '2':
                                checkBoxJ1Vert.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                couleurs[1] = ECouleur.COLOR_GREEN;
                                break;
                            case '3':
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ1Vert.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                couleurs[2] = ECouleur.COLOR_GREEN;
                                break;
                            case '4':
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ1Vert.IsChecked = false;
                                couleurs[3] = ECouleur.COLOR_GREEN;
                                break;
                        }
                        break;
                    case 'O':
                        switch (fin)
                        {
                            case '1':
                                checkBoxJ2Orange.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                couleurs[0] = ECouleur.COLOR_ORANGE;
                                break;
                            case '2':
                                checkBoxJ1Orange.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                couleurs[1] = ECouleur.COLOR_ORANGE;
                                break;
                            case '3':
                                checkBoxJ2Orange.IsChecked = false;
                                checkBoxJ1Orange.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                couleurs[2] = ECouleur.COLOR_ORANGE;
                                break;
                            case '4':
                                checkBoxJ2Orange.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                checkBoxJ1Orange.IsChecked = false;
                                couleurs[3] = ECouleur.COLOR_ORANGE;
                                break;
                        }
                        break;
                }

                // Selon la civilisation, décocher autres couleurs de la civilisation
                switch (fin)
                {
                    case '1':
                        switch (couleurs[0])
                        {
                            case ECouleur.COLOR_RED:
                                checkBoxJ1Bleu.IsChecked = false;
                                checkBoxJ1Vert.IsChecked = false;
                                checkBoxJ1Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_BLUE:
                                checkBoxJ1Rouge.IsChecked = false;
                                checkBoxJ1Vert.IsChecked = false;
                                checkBoxJ1Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_GREEN:
                                checkBoxJ1Bleu.IsChecked = false;
                                checkBoxJ1Rouge.IsChecked = false;
                                checkBoxJ1Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_ORANGE:
                                checkBoxJ1Bleu.IsChecked = false;
                                checkBoxJ1Vert.IsChecked = false;
                                checkBoxJ1Rouge.IsChecked = false;
                                break;
                            default:
                                break;
                        }
                        break;
                    case '2':
                        switch (couleurs[1])
                        {
                            case ECouleur.COLOR_RED:
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ2Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_BLUE:
                                checkBoxJ2Rouge.IsChecked = false;
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ2Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_GREEN:
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ2Rouge.IsChecked = false;
                                checkBoxJ2Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_ORANGE:
                                checkBoxJ2Bleu.IsChecked = false;
                                checkBoxJ2Vert.IsChecked = false;
                                checkBoxJ2Rouge.IsChecked = false;
                                break;
                            default:
                                break;
                        }
                        break;
                    case '3':
                        switch (couleurs[2])
                        {
                            case ECouleur.COLOR_RED:
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_BLUE:
                                checkBoxJ3Rouge.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_GREEN:
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ3Rouge.IsChecked = false;
                                checkBoxJ3Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_ORANGE:
                                checkBoxJ3Bleu.IsChecked = false;
                                checkBoxJ3Vert.IsChecked = false;
                                checkBoxJ3Rouge.IsChecked = false;
                                break;
                            default:
                                break;
                        }
                        break;
                    case '4':
                        switch (couleurs[3])
                        {
                            case ECouleur.COLOR_RED:
                                checkBoxJ4Bleu.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_BLUE:
                                checkBoxJ4Rouge.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_GREEN:
                                checkBoxJ4Bleu.IsChecked = false;
                                checkBoxJ4Rouge.IsChecked = false;
                                checkBoxJ4Orange.IsChecked = false;
                                break;
                            case ECouleur.COLOR_ORANGE:
                                checkBoxJ4Bleu.IsChecked = false;
                                checkBoxJ4Vert.IsChecked = false;
                                checkBoxJ4Rouge.IsChecked = false;
                                break;
                            default:
                                break;
                        }
                        break;
                    }
        }
        
        private void ClickSuivant(object sender, RoutedEventArgs e)
        {
            IHMCivilisation[] civilisations;
          
            // Les booléens j1, j2, j3, j4 testent pour chaque joueur si toutes les informations ont été données
            bool infosj1 =  (
                                    ((bool)radioButtonJ1EII.IsChecked | (bool)radioButtonJ1INFO.IsChecked)
                                &&  ((bool)checkBoxJ1Rouge.IsChecked | (bool)checkBoxJ1Bleu.IsChecked | (bool)checkBoxJ1Vert.IsChecked | (bool)checkBoxJ1Orange.IsChecked)
                                &&  !((nameJ1.Text == "Nom") || (nameJ1.Text == ""))
                            );
            bool infosj2 =  (
                                    ((bool)radioButtonJ2EII.IsChecked | (bool)radioButtonJ2INFO.IsChecked)
                                &&  ((bool)checkBoxJ2Rouge.IsChecked | (bool)checkBoxJ2Bleu.IsChecked | (bool)checkBoxJ2Vert.IsChecked | (bool)checkBoxJ2Orange.IsChecked)
                                &&  !((nameJ2.Text == "Nom") || (nameJ2.Text == ""))
                            );
            bool infosj3 =  (
                                    ((bool)radioButtonJ3EII.IsChecked | (bool)radioButtonJ3INFO.IsChecked)
                                &&  ((bool)checkBoxJ3Rouge.IsChecked | (bool)checkBoxJ3Bleu.IsChecked | (bool)checkBoxJ3Vert.IsChecked | (bool)checkBoxJ3Orange.IsChecked)
                                &&  !((nameJ3.Text == "Nom") || (nameJ3.Text == ""))
                            );
            bool infosj4 =  (
                                    ((bool)radioButtonJ4EII.IsChecked | (bool)radioButtonJ4INFO.IsChecked)
                                &&  ((bool)checkBoxJ4Rouge.IsChecked | (bool)checkBoxJ4Bleu.IsChecked | (bool)checkBoxJ4Vert.IsChecked | (bool)checkBoxJ4Orange.IsChecked)
                                &&  !((nameJ4.Text == "Nom") || (nameJ4.Text == ""))
                            );

            switch (nombreJoueurs)
            {
                case 2:
                    if (infosj1 && infosj2)
                    {
                        civilisations = new IHMCivilisation[2];
                        civilisations[0] = new IHMCivilisation();
                        civilisations[1] = new IHMCivilisation();

                        civilisations[0].civilisation = ((bool)radioButtonJ1EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[1].civilisation = ((bool)radioButtonJ2EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;

                        civilisations[0].nom = nameJ1.Text;
                        civilisations[1].nom = nameJ2.Text;

                        civilisations[0].couleur = couleurs[0];
                        civilisations[1].couleur = couleurs[1];

                        // Lancement de la fenetre suivante
                        fenetreSuivante = new FenetreJeu(taille, civilisations);
                        fenetreSuivante.Show();
                        Close();
                    }
                    else
                    {
                        MessageBox.Show("Veuillez donner toutes les informations.");
                    }
                    break;

                case 3:
                    if (infosj1 && infosj2 && infosj3)
                    {
                        civilisations = new IHMCivilisation[3];
                        civilisations[0] = new IHMCivilisation();
                        civilisations[1] = new IHMCivilisation();
                        civilisations[2] = new IHMCivilisation();

                        civilisations[0].civilisation = ((bool)radioButtonJ1EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[1].civilisation = ((bool)radioButtonJ2EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[2].civilisation = ((bool)radioButtonJ3EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;

                        civilisations[0].nom = nameJ1.Text;
                        civilisations[1].nom = nameJ2.Text;
                        civilisations[2].nom = nameJ3.Text;

                        civilisations[0].couleur = couleurs[0];
                        civilisations[1].couleur = couleurs[1];
                        civilisations[2].couleur = couleurs[2];

                        // Lancement de la fenetre suivante
                        fenetreSuivante = new FenetreJeu(taille, civilisations);
                        fenetreSuivante.Show();
                        Close();
                    }
                    else
                    {
                        MessageBox.Show("Veuillez donner toutes les informations.");
                    }
                    break;

                case 4:
                    if (infosj1 && infosj2 && infosj3 && infosj4)
                    {
                        civilisations = new IHMCivilisation[4];
                        civilisations[0] = new IHMCivilisation();
                        civilisations[1] = new IHMCivilisation();
                        civilisations[2] = new IHMCivilisation();
                        civilisations[3] = new IHMCivilisation();

                        civilisations[0].civilisation = ((bool)radioButtonJ1EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[1].civilisation = ((bool)radioButtonJ2EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[2].civilisation = ((bool)radioButtonJ3EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;
                        civilisations[3].civilisation = ((bool)radioButtonJ4EII.IsChecked) ? ECivilisationNom.CIVILISATION_EII : ECivilisationNom.CIVILISATION_INFO;

                        civilisations[0].nom = nameJ1.Text;
                        civilisations[1].nom = nameJ2.Text;
                        civilisations[2].nom = nameJ3.Text;
                        civilisations[3].nom = nameJ4.Text;

                        civilisations[0].couleur = couleurs[0];
                        civilisations[1].couleur = couleurs[1];
                        civilisations[2].couleur = couleurs[2];
                        civilisations[3].couleur = couleurs[3];

                        // Lancement de la fenetre suivante
                        fenetreSuivante = new FenetreJeu(taille, civilisations);
                        fenetreSuivante.Show();
                        Close();
                    }
                    else
                    {
                        MessageBox.Show("Veuillez donner toutes les informations.");
                    }
                    break;
            }
        }
    }
}
